import IFormInputConfig from './IFormInput/index'
import IFormLayoutConfig from './IFormLayout/index'
import IFormTableConfig from './IFormTable/index'

// 组件配置映射
const componentConfigs = {
  IFormInput: IFormInputConfig,
  IFormLayout: IFormLayoutConfig,
  IFormTable: IFormTableConfig,
  // 其他组件类型映射到对应的配置
  input: IFormInputConfig,
  textarea: IFormInputConfig, // textarea 使用 IFormInput 配置，但 type 为 textarea
  select: IFormInputConfig, // 暂时使用 IFormInput 配置，后续可以创建专门的 Select 组件
  number: IFormInputConfig, // 暂时使用 IFormInput 配置，后续可以创建专门的 Number 组件
  date: IFormInputConfig, // 暂时使用 IFormInput 配置，后续可以创建专门的 Date 组件
  radio: IFormInputConfig, // 暂时使用 IFormInput 配置，后续可以创建专门的 Radio 组件
  checkbox: IFormInputConfig, // 暂时使用 IFormInput 配置，后续可以创建专门的 Checkbox 组件
  table: IFormTableConfig, // 表格组件
} as const

/**
 * 获取组件的默认属性配置
 * @param componentType 组件类型
 * @returns 组件的默认属性配置
 */
export function getComponentDefaultAttrs(componentType: string): Record<string, unknown> {
  const config = componentConfigs[componentType as keyof typeof componentConfigs]

  if (!config) {
    console.warn(`未找到组件类型 ${componentType} 的配置，使用默认配置`)
    return {
      label: '未知组件',
      required: false
    }
  }

  // 返回配置中的 attrs 对象
  return { ...config.attrs }
}

/**
 * 获取所有可用的组件类型
 * @returns 组件类型列表
 */
export function getAvailableComponentTypes(): string[] {
  return Object.keys(componentConfigs)
}

/**
 * 获取组件配置信息
 * @param componentType 组件类型
 * @returns 完整的组件配置
 */
export function getComponentConfig(componentType: string) {
  return componentConfigs[componentType as keyof typeof componentConfigs]
}

export default componentConfigs
